#!/usr/bin/env python3
# -*- coding: utf-8 -*-

"""
PyInstaller 一键打包封装工具
支持参数：脚本路径 打包名称 图标路径
"""

import sys
import argparse
from pathlib import Path
from PyInstaller.__main__ import run


def pyinstaller_build(script_path: str, name: str = None, icon: str = None):
    """
    执行PyInstaller打包

    :param script_path: 要打包的Python脚本路径
    :param name: 生成的exe名称（不含扩展名）
    :param icon: 图标文件路径（.ico格式）
    """
    # 参数有效性验证
    if not Path(script_path).exists():
        raise FileNotFoundError(f"脚本文件不存在: {script_path}")
    if icon and not Path(icon).exists():
        raise FileNotFoundError(f"图标文件不存在: {icon}")

    # 构建PyInstaller参数
    pyi_args = [
        '--onefile',  # 单文件模式
    ]

    # 添加可选参数
    if name:
        pyi_args.append(f'--name={name}')
    if icon:
        pyi_args.append(f'--icon={icon}')

    # 脚本路径必须放在最后
    pyi_args.append(script_path)

    # 打印调试信息
    print("⚡ PyInstaller 打包配置:")
    print(f"  - 脚本文件: {script_path}")
    print(f"  - 输出名称: {name or Path(script_path).stem}")
    print(f"  - 程序图标: {icon or '未指定'}")
    print(f"  - 完整命令: pyinstaller {' '.join(pyi_args)}")

    # 执行打包
    try:
        run(pyi_args=pyi_args)
        print(f"\n🎉 打包成功！输出文件: ./dist/{name or Path(script_path).stem}.exe")
    except Exception as e:
        print(f"\n❌ 打包失败: {str(e)}", file=sys.stderr)
        sys.exit(1)


def main():
    # 执行打包
    pyinstaller_build(
        script_path=r'C:\Users\17812\PycharmProjects\craw\src\com\itheima\web\util\a.py',
        name='myapp',
        icon=r'C:\Users\17812\PycharmProjects\craw\src\com\itheima\web\util\2.ico'
    )


if __name__ == '__main__':
    main()
